/*
 * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */


package com.sun.jmx.snmp.daemon;

// java import

import java.util.Vector;
import java.io.IOException;
import java.net.InetAddress;

// jmx imports
//
import com.sun.jmx.snmp.SnmpPduFactory;
import com.sun.jmx.snmp.SnmpStatusException;
import com.sun.jmx.snmp.SnmpVarBindList;
import com.sun.jmx.snmp.SnmpOid;
import com.sun.jmx.snmp.SnmpTimeticks;
import com.sun.jmx.snmp.SnmpIpAddress;
import com.sun.jmx.snmp.SnmpPduPacket;
import com.sun.jmx.snmp.InetAddressAcl;
import com.sun.jmx.snmp.SnmpPeer;

// SNMP Runtime imports
//
import com.sun.jmx.snmp.agent.SnmpMibAgent;
import com.sun.jmx.snmp.agent.SnmpMibHandler;
import com.sun.jmx.snmp.agent.SnmpUserDataFactory;

/**
 * Exposes the remote management interface of the {@link SnmpAdaptorServer} MBean.
 * <p><b>This API is a Sun Microsystems internal API  and is subject
 * to change without notice.</b></p>
 */

public interface SnmpAdaptorServerMBean extends CommunicatorServerMBean {

  // GETTERS AND SETTERS
  //--------------------

  /**
   * Returns the Ip address based ACL used by this SNMP protocol adaptor.
   *
   * @return The <CODE>InetAddressAcl</CODE> implementation.
   * @since 1.5
   */
  public InetAddressAcl getInetAddressAcl();

  /**
   * Returns the port used by this SNMP protocol adaptor for sending traps.
   * By default, port 162 is used.
   *
   * @return The port number for sending SNMP traps.
   */
  public Integer getTrapPort();

  /**
   * Sets the port used by this SNMP protocol adaptor for sending traps.
   *
   * @param port The port number for sending SNMP traps.
   */
  public void setTrapPort(Integer port);

  /**
   * Returns the port used by this SNMP protocol adaptor for sending inform requests.
   * By default, port 162 is used.
   *
   * @return The port number for sending SNMP inform requests.
   */
  public int getInformPort();

  /**
   * Sets the port used by this SNMP protocol adaptor for sending inform requests.
   *
   * @param port The port number for sending SNMP inform requests.
   */
  public void setInformPort(int port);

  /**
   * Gets the number of managers that have been processed by this SNMP protocol adaptor
   * since its creation.
   *
   * @return The number of managers handled by this SNMP protocol adaptor since its creation. This
   * counter is not reset by the <CODE>stop</CODE> method.
   */
  public int getServedClientCount();

  /**
   * Gets the number of managers currently being processed by this
   * SNMP protocol adaptor.
   *
   * @return The number of managers currently being processed by this SNMP protocol adaptor.
   */
  public int getActiveClientCount();

  /**
   * Gets the maximum number of managers that this SNMP protocol adaptor can
   * process concurrently.
   *
   * @return The maximum number of managers that this SNMP protocol adaptor can process
   * concurrently.
   */
  public int getMaxActiveClientCount();

  /**
   * Sets the maximum number of managers this SNMP protocol adaptor can
   * process concurrently.
   *
   * @param c The number of managers.
   * @throws java.lang.IllegalStateException This method has been invoked while the communicator was
   * <CODE>ONLINE</CODE> or <CODE>STARTING</CODE>.
   */
  public void setMaxActiveClientCount(int c) throws java.lang.IllegalStateException;

  /**
   * Returns the protocol of this SNMP protocol adaptor.
   *
   * @return The string "snmp".
   */
  @Override
  public String getProtocol();

  /**
   * Returns the buffer size of this SNMP protocol adaptor.
   * By default, buffer size 1024 is used.
   *
   * @return The buffer size.
   */
  public Integer getBufferSize();

  /**
   * Sets the buffer size of this SNMP protocol adaptor.
   *
   * @param s The buffer size.
   * @throws java.lang.IllegalStateException This method has been invoked while the communicator was
   * <CODE>ONLINE</CODE> or <CODE>STARTING</CODE>.
   */
  public void setBufferSize(Integer s) throws java.lang.IllegalStateException;

  /**
   * Gets the number of times to try sending an inform request before giving up.
   *
   * @return The maximun number of tries.
   */
  public int getMaxTries();

  /**
   * Changes the maximun number of times to try sending an inform request before giving up.
   *
   * @param newMaxTries The maximun number of tries.
   */
  public void setMaxTries(int newMaxTries);

  /**
   * Gets the timeout to wait for an inform response from the manager.
   *
   * @return The value of the timeout property.
   */
  public int getTimeout();

  /**
   * Changes the timeout to wait for an inform response from the manager.
   *
   * @param newTimeout The timeout (in milliseconds).
   */
  public void setTimeout(int newTimeout);

  /**
   * Returns the message factory of this SNMP protocol adaptor.
   *
   * @return The factory object.
   */
  public SnmpPduFactory getPduFactory();

  /**
   * Sets the message factory of this SNMP protocol adaptor.
   *
   * @param factory The factory object (null means the default factory).
   */
  public void setPduFactory(SnmpPduFactory factory);


  /**
   * Set the user-data factory of this SNMP protocol adaptor.
   *
   * @param factory The factory object (null means no factory).
   * @see com.sun.jmx.snmp.agent.SnmpUserDataFactory
   */
  public void setUserDataFactory(SnmpUserDataFactory factory);

  /**
   * Get the user-data factory associated with this SNMP protocol adaptor.
   *
   * @return The factory object (null means no factory).
   * @see com.sun.jmx.snmp.agent.SnmpUserDataFactory
   */
  public SnmpUserDataFactory getUserDataFactory();

  /**
   * Returns <CODE>true</CODE> if authentication traps are enabled.
   * <P>
   * When this feature is enabled, the SNMP protocol adaptor sends
   * an <CODE>authenticationFailure</CODE> trap each time an authentication fails.
   * <P>
   * The default behaviour is to send authentication traps.
   *
   * @return <CODE>true</CODE> if authentication traps are enabled, <CODE>false</CODE> otherwise.
   */
  public boolean getAuthTrapEnabled();

  /**
   * Sets the flag indicating if traps need to be sent in case of authentication failure.
   *
   * @param enabled Flag indicating if traps need to be sent.
   */
  public void setAuthTrapEnabled(boolean enabled);

  /**
   * Returns <code>true</code> if this SNMP protocol adaptor sends a response in case of
   * authentication failure. <P> When this feature is enabled, the SNMP protocol adaptor sends a
   * response with <CODE>noSuchName</CODE> or <CODE>readOnly</CODE> when the authentication failed.
   * If the flag is disabled, the SNMP protocol adaptor trashes the PDU silently. <P> The default
   * behavior is to send responses.
   *
   * @return <code>true</code> if responses are sent.
   */
  public boolean getAuthRespEnabled();

  /**
   * Sets the flag indicating if responses need to be sent in case of authentication failure.
   *
   * @param enabled Flag indicating if responses need to be sent.
   */
  public void setAuthRespEnabled(boolean enabled);

  /**
   * Returns the enterprise OID. It is used by {@link #snmpV1Trap snmpV1Trap} to fill
   * the 'enterprise' field of the trap request.
   *
   * @return The OID in string format "x.x.x.x".
   */
  public String getEnterpriseOid();

  /**
   * Sets the enterprise OID.
   *
   * @param oid The OID in string format "x.x.x.x".
   * @throws IllegalArgumentException The string format is incorrect
   */
  public void setEnterpriseOid(String oid) throws IllegalArgumentException;

  /**
   * Returns the names of the MIBs available in this SNMP protocol adaptor.
   *
   * @return An array of MIB names.
   */
  public String[] getMibs();

  // GETTERS FOR SNMP GROUP (MIBII)
  //-------------------------------

  /**
   * Returns the <CODE>snmpOutTraps</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpOutTraps</CODE> value.
   */
  public Long getSnmpOutTraps();

  /**
   * Returns the <CODE>snmpOutGetResponses</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpOutGetResponses</CODE> value.
   */
  public Long getSnmpOutGetResponses();

  /**
   * Returns the <CODE>snmpOutGenErrs</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpOutGenErrs</CODE> value.
   */
  public Long getSnmpOutGenErrs();

  /**
   * Returns the <CODE>snmpOutBadValues</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpOutBadValues</CODE> value.
   */
  public Long getSnmpOutBadValues();

  /**
   * Returns the <CODE>snmpOutNoSuchNames</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpOutNoSuchNames</CODE> value.
   */
  public Long getSnmpOutNoSuchNames();

  /**
   * Returns the <CODE>snmpOutTooBigs</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpOutTooBigs</CODE> value.
   */
  public Long getSnmpOutTooBigs();

  /**
   * Returns the <CODE>snmpInASNParseErrs</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpInASNParseErrs</CODE> value.
   */
  public Long getSnmpInASNParseErrs();

  /**
   * Returns the <CODE>snmpInBadCommunityUses</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpInBadCommunityUses</CODE> value.
   */
  public Long getSnmpInBadCommunityUses();

  /**
   * Returns the <CODE>snmpInBadCommunityNames</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpInBadCommunityNames</CODE> value.
   */
  public Long getSnmpInBadCommunityNames();

  /**
   * Returns the <CODE>snmpInBadVersions</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpInBadVersions</CODE> value.
   */
  public Long getSnmpInBadVersions();

  /**
   * Returns the <CODE>snmpOutPkts</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpOutPkts</CODE> value.
   */
  public Long getSnmpOutPkts();

  /**
   * Returns the <CODE>snmpInPkts</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpInPkts</CODE> value.
   */
  public Long getSnmpInPkts();

  /**
   * Returns the <CODE>snmpInGetRequests</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpInGetRequests</CODE> value.
   */
  public Long getSnmpInGetRequests();

  /**
   * Returns the <CODE>snmpInGetNexts</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpInGetNexts</CODE> value.
   */
  public Long getSnmpInGetNexts();

  /**
   * Returns the <CODE>snmpInSetRequests</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpInSetRequests</CODE> value.
   */
  public Long getSnmpInSetRequests();

  /**
   * Returns the <CODE>snmpInTotalSetVars</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpInTotalSetVars</CODE> value.
   */
  public Long getSnmpInTotalSetVars();

  /**
   * Returns the <CODE>snmpInTotalReqVars</CODE> value defined in MIB-II.
   *
   * @return The <CODE>snmpInTotalReqVars</CODE> value.
   */
  public Long getSnmpInTotalReqVars();

  /**
   * Returns the <CODE>snmpSilentDrops</CODE> value defined in rfc 1907 NMPv2-MIB .
   *
   * @return The <CODE>snmpSilentDrops</CODE> value.
   * @since 1.5
   */
  public Long getSnmpSilentDrops();

  /**
   * Returns the <CODE>snmpProxyDrops</CODE> value defined in rfc 1907 NMPv2-MIB .
   *
   * @return The <CODE>snmpProxyDrops</CODE> value.
   * @since 1.5
   */
  public Long getSnmpProxyDrops();

  // PUBLIC METHODS
  //---------------

  /**
   * Adds a new MIB in the SNMP MIB handler. This method is called automatically by {@link
   * com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptor(SnmpMibHandler)} and {@link
   * com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptorName(ObjectName)} and should not be called
   * directly.
   *
   * @param mib The MIB to add.
   * @return A reference to the SNMP MIB handler.
   * @throws IllegalArgumentException If the parameter is null.
   */
  public SnmpMibHandler addMib(SnmpMibAgent mib) throws IllegalArgumentException;

  /**
   * Adds a new MIB in the SNMP MIB handler.
   *
   * @param mib The MIB to add.
   * @param oids The set of OIDs this agent implements.
   * @return A reference to the SNMP MIB handler.
   * @throws IllegalArgumentException If the parameter is null.
   * @since 1.5
   */
  public SnmpMibHandler addMib(SnmpMibAgent mib, SnmpOid[] oids) throws IllegalArgumentException;

  /**
   * Removes the specified MIB from the SNMP protocol adaptor. This method is called automatically
   * by {@link com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptor(SnmpMibHandler)} and {@link
   * com.sun.jmx.snmp.agent.SnmpMibAgent#setSnmpAdaptorName(ObjectName)} and should not be called
   * directly.
   *
   * @param mib The MIB to be removed.
   * @return <code>true</code> if the specified <CODE>mib</CODE> was a MIB included in the SNMP MIB
   * handler, <code>false</code> otherwise.
   */
  public boolean removeMib(SnmpMibAgent mib);

  /**
   * Sends a trap using SNMP V1 trap format.
   * <BR>The trap is sent to each destination defined in the ACL file (if available).
   * If no ACL file or no destinations are available, the trap is sent to the local host.
   *
   * @param generic The generic number of the trap.
   * @param specific The specific number of the trap.
   * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
   * @throws IOException An I/O error occurred while sending the trap.
   * @throws SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
   */
  public void snmpV1Trap(int generic, int specific, SnmpVarBindList varBindList)
      throws IOException, SnmpStatusException;


  /**
   * Sends a trap using SNMP V1 trap format.
   * <BR>The trap is sent to the specified <CODE>InetAddress</CODE> destination
   * using the specified community string (and the ACL file is not used).
   *
   * @param address The <CODE>InetAddress</CODE> destination of the trap.
   * @param cs The community string to be used for the trap.
   * @param generic The generic number of the trap.
   * @param specific The specific number of the trap.
   * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
   * @throws IOException An I/O error occurred while sending the trap.
   * @throws SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
   */
  public void snmpV1Trap(InetAddress address, String cs, int generic, int specific,
      SnmpVarBindList varBindList)
      throws IOException, SnmpStatusException;


  /**
   * Sends a trap using SNMP V1 trap format. <BR>The trap is sent to the specified
   * <CODE>SnmpPeer</CODE> destination. The community string used is the one located in the
   * <CODE>SnmpPeer</CODE> parameters (<CODE>SnmpParameters.getRdCommunity() </CODE>).
   *
   * @param peer The <CODE>SnmpPeer</CODE> destination of the trap.
   * @param agentAddr The agent address to be used for the trap.
   * @param enterpOid The enterprise OID to be used for the trap.
   * @param generic The generic number of the trap.
   * @param specific The specific number of the trap.
   * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
   * @param time The time stamp (overwrite the current time).
   * @throws IOException An I/O error occurred while sending the trap.
   * @throws SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
   * @since 1.5
   */
  public void snmpV1Trap(SnmpPeer peer,
      SnmpIpAddress agentAddr,
      SnmpOid enterpOid,
      int generic,
      int specific,
      SnmpVarBindList varBindList,
      SnmpTimeticks time) throws IOException, SnmpStatusException;

  /**
   * Sends a trap using SNMP V2 trap format. <BR>The trap is sent to the specified
   * <CODE>SnmpPeer</CODE> destination. <BR>The community string used is the one located in the
   * <CODE>SnmpPeer</CODE> parameters (<CODE>SnmpParameters.getRdCommunity() </CODE>). <BR>The
   * variable list included in the outgoing trap is composed of the following items: <UL>
   * <LI><CODE>sysUpTime.0</CODE> with the value specified by <CODE>time</CODE>
   * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by <CODE>trapOid</CODE> <LI><CODE>all
   * the (oid,values)</CODE> from the specified <CODE>varBindList</CODE> </UL>
   *
   * @param peer The <CODE>SnmpPeer</CODE> destination of the trap.
   * @param trapOid The OID identifying the trap.
   * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
   * @param time The time stamp (overwrite the current time).
   * @throws IOException An I/O error occurred while sending the trap.
   * @throws SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
   * @since 1.5
   */
  public void snmpV2Trap(SnmpPeer peer,
      SnmpOid trapOid,
      SnmpVarBindList varBindList,
      SnmpTimeticks time) throws IOException, SnmpStatusException;

  /**
   * Sends a trap using SNMP V2 trap format.
   * <BR>The trap is sent to each destination defined in the ACL file (if available).
   * If no ACL file or no destinations are available, the trap is sent to the local host.
   * <BR>The variable list included in the outgoing trap is composed of the following items:
   * <UL>
   * <LI><CODE>sysUpTime.0</CODE> with its current value
   * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by <CODE>trapOid</CODE>
   * <LI><CODE>all the (oid,values)</CODE> from the specified <CODE>varBindList</CODE>
   * </UL>
   *
   * @param trapOid The OID identifying the trap.
   * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
   * @throws IOException An I/O error occurred while sending the trap.
   * @throws SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
   */
  public void snmpV2Trap(SnmpOid trapOid, SnmpVarBindList varBindList)
      throws IOException, SnmpStatusException;


  /**
   * Sends a trap using SNMP V2 trap format.
   * <BR>The trap is sent to the specified <CODE>InetAddress</CODE> destination
   * using the specified community string (and the ACL file is not used).
   * <BR>The variable list included in the outgoing trap is composed of the following items:
   * <UL>
   * <LI><CODE>sysUpTime.0</CODE> with its current value
   * <LI><CODE>snmpTrapOid.0</CODE> with the value specified by <CODE>trapOid</CODE>
   * <LI><CODE>all the (oid,values)</CODE> from the specified <CODE>varBindList</CODE>
   * </UL>
   *
   * @param address The <CODE>InetAddress</CODE> destination of the trap.
   * @param cs The community string to be used for the trap.
   * @param trapOid The OID identifying the trap.
   * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
   * @throws IOException An I/O error occurred while sending the trap.
   * @throws SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
   */
  public void snmpV2Trap(InetAddress address, String cs, SnmpOid trapOid,
      SnmpVarBindList varBindList)
      throws IOException, SnmpStatusException;

  /**
   * Send the specified trap PDU to the passed <CODE>InetAddress</CODE>.
   *
   * @param address The destination address.
   * @param pdu The pdu to send.
   * @throws IOException An I/O error occurred while sending the trap.
   * @throws SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
   * @since 1.5
   */
  public void snmpPduTrap(InetAddress address, SnmpPduPacket pdu)
      throws IOException, SnmpStatusException;

  /**
   * Send the specified trap PDU to the passed <CODE>SnmpPeer</CODE>.
   *
   * @param peer The destination peer. The Read community string is used of
   * <CODE>SnmpParameters</CODE> is used as the trap community string.
   * @param pdu The pdu to send.
   * @throws IOException An I/O error occurred while sending the trap.
   * @throws SnmpStatusException If the trap exceeds the limit defined by <CODE>bufferSize</CODE>.
   * @since 1.5
   */
  public void snmpPduTrap(SnmpPeer peer,
      SnmpPduPacket pdu)
      throws IOException, SnmpStatusException;

  /**
   * Sends an inform using SNMP V2 inform request format. <BR>The inform request is sent to each
   * destination defined in the ACL file (if available). If no ACL file or no destinations are
   * available, the inform request is sent to the local host. <BR>The variable list included in the
   * outgoing inform request is composed of the following items: <UL> <LI><CODE>sysUpTime.0</CODE>
   * with its current value <LI><CODE>snmpTrapOid.0</CODE> with the value specified by
   * <CODE>trapOid</CODE> <LI><CODE>all the (oid,values)</CODE> from the specified
   * <CODE>varBindList</CODE> </UL> To send an inform request, the SNMP adaptor server must be
   * active.
   *
   * @param cb The callback that is invoked when a request is complete.
   * @param trapOid The OID identifying the trap.
   * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
   * @return A vector of {@link com.sun.jmx.snmp.daemon.SnmpInformRequest} objects. <P>If there is
   * no destination host for this inform request, the returned vector will be empty.
   * @throws IllegalStateException This method has been invoked while the SNMP adaptor server was
   * not active.
   * @throws IOException An I/O error occurred while sending the inform request.
   * @throws SnmpStatusException If the inform request exceeds the limit defined by
   * <CODE>bufferSize</CODE>.
   */
  public Vector<?> snmpInformRequest(SnmpInformHandler cb, SnmpOid trapOid,
      SnmpVarBindList varBindList)
      throws IllegalStateException, IOException, SnmpStatusException;

  /**
   * Sends an inform using SNMP V2 inform request format. <BR>The inform is sent to the specified
   * <CODE>InetAddress</CODE> destination using the specified community string. <BR>The variable
   * list included in the outgoing inform request is composed of the following items: <UL>
   * <LI><CODE>sysUpTime.0</CODE> with its current value <LI><CODE>snmpTrapOid.0</CODE> with the
   * value specified by <CODE>trapOid</CODE> <LI><CODE>all the (oid,values)</CODE> from the
   * specified <CODE>varBindList</CODE> </UL> To send an inform request, the SNMP adaptor server
   * must be active.
   *
   * @param address The <CODE>InetAddress</CODE> destination for this inform request.
   * @param cs The community string to be used for the inform request.
   * @param cb The callback that is invoked when a request is complete.
   * @param trapOid The OID identifying the trap.
   * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
   * @return The inform request object.
   * @throws IllegalStateException This method has been invoked while the SNMP adaptor server was
   * not active.
   * @throws IOException An I/O error occurred while sending the inform request.
   * @throws SnmpStatusException If the inform request exceeds the limit defined by
   * <CODE>bufferSize</CODE>.
   */
  public SnmpInformRequest snmpInformRequest(InetAddress address, String cs, SnmpInformHandler cb,
      SnmpOid trapOid, SnmpVarBindList varBindList)
      throws IllegalStateException, IOException, SnmpStatusException;


  /**
   * Sends an inform using SNMP V2 inform request format. <BR>The inform is sent to the specified
   * <CODE>SnmpPeer</CODE> destination. <BR> The community string used is the one located in the
   * <CODE>SnmpPeer</CODE> parameters (<CODE>SnmpParameters.getInformCommunity() </CODE>). <BR>The
   * variable list included in the outgoing inform is composed of the following items: <UL>
   * <LI><CODE>sysUpTime.0</CODE> with its current value <LI><CODE>snmpTrapOid.0</CODE> with the
   * value specified by <CODE>trapOid</CODE> <LI><CODE>all the (oid,values)</CODE> from the
   * specified <CODE>varBindList</CODE> </UL> To send an inform request, the SNMP adaptor server
   * must be active.
   *
   * @param peer The <CODE>SnmpPeer</CODE> destination for this inform request.
   * @param cb The callback that is invoked when a request is complete.
   * @param trapOid The OID identifying the trap.
   * @param varBindList A list of <CODE>SnmpVarBind</CODE> instances or null.
   * @return The inform request object.
   * @throws IllegalStateException This method has been invoked while the SNMP adaptor server was
   * not active.
   * @throws IOException An I/O error occurred while sending the inform request.
   * @throws SnmpStatusException If the inform request exceeds the limit defined by
   * <CODE>bufferSize</CODE>.
   * @since 1.5
   */
  public SnmpInformRequest snmpInformRequest(SnmpPeer peer,
      SnmpInformHandler cb,
      SnmpOid trapOid,
      SnmpVarBindList varBindList) throws IllegalStateException, IOException, SnmpStatusException;
}
